<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    //  JS基本数据类型
    //  string number  boolean  null undefined           object(array)


    // 隐式类型转换
    // 1. 算术运算符的隐式类型转换
    //  (1) 算术运算符 常用于做数字运算
    //  (2) 当其他类型参数算术运算符时,会发生隐式类型转换
    //      a.字符串遇到 "+" 会拼接形成新的字符串 (字符串拼接)
    //      b.字符串遇到 "- * / %" 会先隐式转化为数字, 在参与运算
    //        其中:纯数字类型的字符串 => 直接转数字
    //            非纯数字类型的字符串 => NaN  (NaN 和 任何数运算得到的结果均为NaN)
    //      c 布尔值遇到算术运算符,会先隐式转化为数字, 在参与运算  =>   true转数字类型 1   false转数字类型0
    //      d null undefined 遇到算术运算符,会先隐式转化为数字, 在参与运算 => null转数字类型0  undefined转数字类型NaN 

    // 小结: 除字符串遇到"+"会拼接形成新的字符串外,其他数据均会先会先隐式转化为数字, 在参与运算
    
    // var a = "10";
    // var b = 3;

    // console.log(a + b);  // "10" + 3  => "103"
    // console.log(b + a);  // 3 + "10"  => "310"

    // console.log(a - b);
    // console.log(a * b);
    // console.log(a / b);
    // console.log(a % b);

    // ----------------------------------------

    // var a = "10a";
    // var b = 3;

    // console.log(a + b);  // "10a" + 3  => "10a3"
    // console.log(b + a);  // 3 + "10a"  => "310a"

    // console.log(a - b);  // Number(a) + b  => NaN + 3 =>  NaN
    // console.log(a * b);
    // console.log(a / b);
    // console.log(a % b);

    console.log(true + 3);  // Number(true) + 3  => 1 + 3 => 4
    console.log(false + 3);  // Number(false) + 3  => 0 +  3
    console.log(null + 3);  // Number(null) + 3  => 0 + 3 => 3
    console.log(undefined + 3);  // Number(undefined) + 3  => 3  => NaN + 3 => NaN


    // 字符串拼接
    // var n = 10;
    // var str = "我有" + n + "头小毛驴";
    // console.log(str);


</script>
</html>